The need to store digital files, documents, pictures, images and other data continues to increase rapidly. In connection with the electronic storage of data, systems incorporating more than one storage device have been devised. In general, using a number of storage devices in a coordinated fashion in order to store data can increase the total storage volume of the system. In addition, data can be distributed across the multiple storage devices such that data will not be irretrievably lost if one of the storage devices (or in some cases more than one storage device) fails. An additional advantage that can be achieved by coordinating the operation of a number of individual storage devices is improved data access and/or storage times. Examples of systems that can provide such advantages can be found in the various RAID (redundant array of independent disks) levels that have been developed.
For instance, RAID level 0 implements a striped array in which data is broken into blocks or strips that are written to separate disk drives. This has the effect of improving the data access and storage times as compared to, for example, a system in which all of the data blocks are stored on a single storage device, by spreading the individual input/output (I/O) requests across a number of physical storage devices. Furthermore, RAID level 0 can be implemented with two or more storage devices. However, RAID level 0 is not fault tolerant. That is, a failure of even one storage device within a RAID level 0 array results in the irretrievable loss of data from that array.
RAID level 1, or RAID 1, is an example of a fault tolerant RAID level. According to RAID level 1, data stored in a primary storage device is mirrored on a secondary storage device. Accordingly, RAID level 1 requires at least two storage devices to implement. Furthermore, if more than two storage devices are desired, additional storage devices are added in pairs. That is, RAID level 1 requires an even number of storage devices. During normal operation, read operations are made with respect to a copy of data on a first physical storage device, and write operations result in a copy of data being written to the first physical storage device and a mirrored copy being written to a second physical first physical storage device. If one first physical storage device within a RAID level 1 array fails, data stored on that storage device can be rebuilt onto a replacement storage device by copying the data stored on the failed storage device's companion storage device to the replacement storage device. However, RAID level 1 does not provide improved I/O performance as compared to storing data on a single storage device. Furthermore, because the write transaction rate during normal operation is doubled, certain implementations of RAID level 1 can result in decreased performance as compared to storing data on a single storage device.
Another example of a storage array is RAID level 0+1. In general, RAID level 0+1 comprises paired RAID level 0 arrays. As a result, data can be striped across multiple storage devices, improving I/O performance. By striping copies of the data across additional storage devices, redundancy is provided. The disadvantages of RAID level 0+1 include the minimum requirement of four storage devices and the need to maintain an even number of storage devices in arrays incorporating more than four storage devices.
In RAID level 1+0 (also known as RAID level 10 or RAID 10), two or more storage devices are mirrored together, and then the mirrors are striped together. Like RAID levels 1 and 0+1, a RAID level 1+0 configuration provides fault tolerance if one storage device from each mirror fails. However, the I/O performance of a RAID 1+0 array is not as good as a striped array without mirroring, such as RAID level 0.
Other RAID levels combine independent data storage devices with parity, either stored on a dedicated parity storage device or distributed among data storage devices. Examples of such arrangements include RAID levels 3, 4, 5 and 6. Although such arrangements provide for fault tolerance, they all require at least three storage devices to implement, and require fairly complex controller and parity generation circuitry or software. Additionally, writes to parity-protected RAID arrays are slower than mirrored arrays due to the requirement to calculate new parity for each write I/O.
RAID 1 provides fault-tolerance because two storage devices in the “mirror” contain the same data. It provides good random read performance, because a single storage device can deliver the data. It provides good random write performance, because there is no read-modify-write operations needed for parity calculations. However, it is expensive, because the user gets only 50% usable storage device space. While RAID 1 does provide fault-tolerance, it is limited because it is only single-storage device fault tolerant.